#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    // 1. 最简单的lambda表达式（无捕获）
    auto hello = []() { std::cout << "Hello, Lambda!\n"; };
    hello();

    // 2. 捕获外部变量（值捕获和引用捕获）
    int x = 10, y = 20;
    auto sum = [x, &y]() { return x + y; };
    y = 30;
    std::cout << "Sum: " << sum() << std::endl; // x=10, y=30（引用捕获）

    // 3. 作为算法参数
    std::vector<int> v = {1, 2, 3, 4, 5};
    std::for_each(v.begin(), v.end(), [](int n) { std::cout << n << " "; });
    std::cout << std::endl;
   
    // 4. lambda作为回调函数
    auto callback = [](int result) { std::cout << "Callback result: " << result << std::endl; };
    callback(42);

    // 5. lambda与标准库算法结合（如std::sort自定义排序）
    std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });
    std::cout << "Sorted descending: ";
    for (int n : v) std::cout << n << " ";
    std::cout << std::endl;

    // 6. lambda作为函数对象返回（闭包工厂）
    auto make_multiplier = [](int factor) {
        return [factor](int value) { return value * factor; };
    };
    auto times3 = make_multiplier(3);
    std::cout << "3 * 5 = " << times3(5) << std::endl;
    return 0;
}